package com.mingtai.design.principle.dependenceinversion;

/**
 * @author: tianmingtai
 * @create: 2020/12/09 20:35
 * @description: 依赖倒置原则(Dependence Inversion Principle)
 * <p>
 * 依赖倒置原则
 * 定义：高层模块不应该依赖低层模块，二者都应该依赖其抽象；抽象不应该依赖细节；细节应该依赖抽象。
 * 针对接口编程，不要针对实现编程。
 */

public class Ming {

    /**
     * V1 版本，依赖性较强，不使用
     */
    // public void studyJavaCourse() {
    //     System.out.println("");
    // }
    //
    // public void studyFECourse() {
    //     System.out.println("");
    // }
    //
    // public void studyPythonCourse() {
    //     System.out.println("");
    // }

    /**
     * V2 接口方法注入
     * 传过来一个接口子类，具体学习什么课程，依赖高层模块Test决定
     * @param iCourse
     */
    // public void studyCourse(ICourse iCourse) {
    //     iCourse.studyCourse();
    // }


    /**
     * V3 构造器注入
      */
    // private ICourse iCourse;
    //
    // public Ming(ICourse iCourse) {
    //     this.iCourse = iCourse;
    // }
    //
    // public void studyCourseV3() {
    //     iCourse.studyCourse();
    // }

    private ICourse iCourse;

    public void setiCourse(ICourse iCourse) {
        this.iCourse = iCourse;
    }

    public void studyCourseV3() {
        iCourse.studyCourse();
    }

}
